/**
* @author Lourdes Sanchez
* @author Eugenia Jose
* @author Esteban Castro
* @author Carlos Fernandez
* @author Fernando Turon
* @version 1.0 01-05-12
*
* La clase PantallaRonda se instancia en distintas parte de la aplicación
*
* @see Ronda, InscripcionRonda
*/

package edu.uoc.tds.pec4.swingx;

import java.rmi.RemoteException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.text.MaskFormatter;

import edu.uoc.tds.pec4.common.RemotoInterface;
import edu.uoc.tds.pec4.exception.FechaRealizacionException;
import edu.uoc.tds.pec4.exception.RespuestasNoRellenadasException;
import edu.uoc.tds.pec4.exception.RondaNoValidadaException;
import edu.uoc.tds.pec4.i18n.GestorIdiomas;
import edu.uoc.tds.pec4.model.Pregunta;
import edu.uoc.tds.pec4.model.Prueba;
import edu.uoc.tds.pec4.model.Ronda;
import edu.uoc.tds.pec4.model.TipoRonda;
import edu.uoc.tds.pec4.server.bbdd.GestorParametro;
import java.util.ArrayList;
import java.util.List;

//Fernando
public class PantallaRondas extends javax.swing.JDialog {
    //Variables que se utilizaran a lo largo de la clase
    private RemotoInterface remoto;
    private boolean editable = false;
    private Prueba prueba;
    private TipoRonda tipoRonda;
    private boolean formularioDeConsulta;
    //Para dar formato de entrada a las fechas
    private MaskFormatter mask;

    //Fernando
    //Constructor de la clase, que recibe por parametro la clase que lo invoca, un atributo indicando si es modal o no
    //  la ronda a la que se refiere y el servidor remoto al que se conecta
    //Este constructor viene de la clase PantallaPruebasEnInscripcion
    public PantallaRondas(PantallaPruebasEnInscripcion pantallaPruebasEnInscripcion, boolean modal, Ronda ronda, RemotoInterface remoto){
        //En caso de que ocurra una excepcion tratare de capturarla
        try {
            this.remoto = remoto;

            //Asignamos a prueba los datos recibidos por parametro
            this.prueba = this.remoto.getPrueba(ronda.getId_prueba());

            //En funcion del tipo de ronda lo definimos para toda la clase
            if(ronda.getId_tipo_ronda()==0)
                this.tipoRonda = TipoRonda.CLASIFICATORIA;
            else
                this.tipoRonda = TipoRonda.ELIMINATORIA;

            this.mask = new javax.swing.text.MaskFormatter();

            initComponents();
            myInitComponents();
        }

        //Capturamos el error en caso de problemas con el servicio remoto
        catch (RemoteException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, exc.detail, GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }
    }

    //Fernando
    //Constructor de la clase, que recibe por parametro la clase que lo invoca, un atributo indicando si es modal o no
    //  la ronda a la que se refiere y el servidor remoto al que se conecta
    //ESte constructor viene de la clase PantallaPruebasEnClasificacion
    public PantallaRondas(PantallaPruebasEnClasificacion pantallaPruebasEnClasificacion, boolean modal, Ronda ronda, RemotoInterface remoto){
        //En caso de que ocurra una excepcion tratare de capturarla
        try {
            this.remoto = remoto;

            //Asignamos a prueba los datos recibidos por parametro
            this.prueba = this.remoto.getPrueba(ronda.getId_prueba());

            //Desde la clase desde la que se llama siempre sera de tipo eliminatoria
            this.tipoRonda = TipoRonda.ELIMINATORIA;

            this.mask = new javax.swing.text.MaskFormatter();

            initComponents();
            myInitComponents();
        }

        //Capturamos el error en caso de problemas con el servicio remoto
        catch (RemoteException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, exc.detail, GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }
    }

    //Fernando
    //Constructor de la clase, que recibe por parametro la clase que lo invoca, un atributo indicando si es modal o no
    //  la ronda a la que se refiere y el servidor remoto al que se conecta
    public PantallaRondas(PantallaRondasLista pantallaRondaLista, boolean modal, Ronda ronda, RemotoInterface remoto){
        //En caso de que ocurra una excepcion tratare de capturarla
        try {
            this.remoto = remoto;

            //Asignamos a pruebaa los datos recibidos por parametro
            this.prueba = this.remoto.getPrueba(ronda.getId_prueba());

            //Hacemos que el formulario sea de solo lectura
            this.formularioDeConsulta = true;
            this.editable= false;

            //En funcion del tipo de ronda lo definimos para toda la clase
            if(ronda.getId_tipo_ronda()==0)
                this.tipoRonda = TipoRonda.CLASIFICATORIA;
            else
                this.tipoRonda = TipoRonda.ELIMINATORIA;

            this.mask = new javax.swing.text.MaskFormatter();

            initComponents();
            myInitComponents();
        }

        //Capturamos el error en caso de problemas con el servicio remoto
        catch (RemoteException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, exc.detail, GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jToolBarraHerramientas = new javax.swing.JToolBar();
        btnEdit = new javax.swing.JButton();
        btnSave = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JToolBar.Separator();
        btnExit = new javax.swing.JButton();
        jPanelRondas = new javax.swing.JPanel();
        jlblFechaAlta = new javax.swing.JLabel();
        jlblFechaModificacion = new javax.swing.JLabel();
        jlblFechaBaja = new javax.swing.JLabel();
        jlblNumeroDePreguntas = new javax.swing.JLabel();
        jtxtNumeroPreguntas = new javax.swing.JTextField();
        jtxtResponsableDeCierre = new javax.swing.JTextField();
        jlblResponsableDeCierre = new javax.swing.JLabel();
        jlblFechasDeRealizacion = new javax.swing.JLabel();
        jlblDesde = new javax.swing.JLabel();
        jlblHasta = new javax.swing.JLabel();
        jlblRespuestasCorrectas = new javax.swing.JLabel();
        jbtnActualizar = new javax.swing.JButton();
        jPanelPreguntas = new javax.swing.JPanel();
        jScrollPanePreguntas = new javax.swing.JScrollPane();
        jtablePreguntas = new javax.swing.JTable();
        try {
            mask.setMask("##/##/####");
        } 
        catch (java.text.ParseException exc) {
        }

        mask.setPlaceholderCharacter('_');
        jtxtFechaAlta = new javax.swing.JFormattedTextField(mask);
        try {
            mask.setMask("##/##/####");
        } 
        catch (java.text.ParseException exc) {
        }

        mask.setPlaceholderCharacter('_');
        jtxtFechaModificacion = new javax.swing.JFormattedTextField(mask);
        try {
            mask.setMask("##/##/####");
        } 
        catch (java.text.ParseException exc) {
        }

        mask.setPlaceholderCharacter('_');
        jtxtFechaBaja = new javax.swing.JFormattedTextField(mask);
        jtxtRealizacionDesde = new javax.swing.JTextField();
        jtxtRealizacionHasta = new javax.swing.JTextField();
        jlblPrueba = new javax.swing.JLabel();
        jtxtId = new javax.swing.JTextField();
        jlblTipoRonda = new javax.swing.JLabel();
        jtxtTipoRonda = new javax.swing.JTextField();
        jmnuBarRondas = new javax.swing.JMenuBar();
        jmnuArchivo = new javax.swing.JMenu();
        jSeparatorArc1 = new javax.swing.JPopupMenu.Separator();
        jmnuSalir = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("eOlympics - Pruebas");

        jToolBarraHerramientas.setRollover(true);

        btnEdit.setForeground(new java.awt.Color(102, 153, 255));
        btnEdit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Modify.png"))); // NOI18N
        btnEdit.setToolTipText("Moificar");
        btnEdit.setFocusable(false);
        btnEdit.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnEdit.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnEdit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditActionPerformed(evt);
            }
        });
        jToolBarraHerramientas.add(btnEdit);

        btnSave.setForeground(new java.awt.Color(102, 153, 255));
        btnSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Download.png"))); // NOI18N
        btnSave.setToolTipText("Guardar");
        btnSave.setFocusable(false);
        btnSave.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnSave.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnSave.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSaveActionPerformed(evt);
            }
        });
        jToolBarraHerramientas.add(btnSave);
        jToolBarraHerramientas.add(jSeparator1);

        btnExit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Exit.png"))); // NOI18N
        btnExit.setToolTipText("Salir");
        btnExit.setFocusable(false);
        btnExit.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnExit.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExitsalir(evt);
            }
        });
        jToolBarraHerramientas.add(btnExit);

        jlblFechaAlta.setText("Fecha Alta");

        jlblFechaModificacion.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jlblFechaModificacion.setText("Fecha Modificación");

        jlblFechaBaja.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jlblFechaBaja.setText("Fecha Baja");

        jlblNumeroDePreguntas.setText("Nº de preguntas");

        jtxtNumeroPreguntas.setHorizontalAlignment(javax.swing.JTextField.RIGHT);

        jtxtResponsableDeCierre.setEditable(false);

        jlblResponsableDeCierre.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jlblResponsableDeCierre.setText("Responsable de Cierre");

        jlblFechasDeRealizacion.setFont(new java.awt.Font("Tahoma", 1, 11));
        jlblFechasDeRealizacion.setText("Fechas de Realización");

        jlblDesde.setText("Desde (DD/MM/AAAA)");

        jlblHasta.setText("Hasta (DD/MM/AAAA)");

        jlblRespuestasCorrectas.setFont(new java.awt.Font("Tahoma", 1, 11));
        jlblRespuestasCorrectas.setText("Respuestas correctas");

        jbtnActualizar.setText("Actualizar");
        jbtnActualizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnActualizarActionPerformed(evt);
            }
        });

        jtablePreguntas.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Pregunta", "Respuesta A", "Respuesta B", "Respuesta C", "Respuesta D"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.Boolean.class, java.lang.Boolean.class, java.lang.Boolean.class, java.lang.Boolean.class
            };
            boolean[] canEdit = new boolean [] {
                false, true, true, true, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jtablePreguntas.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jtablePreguntasMouseClicked(evt);
            }
        });
        jScrollPanePreguntas.setViewportView(jtablePreguntas);

        javax.swing.GroupLayout jPanelPreguntasLayout = new javax.swing.GroupLayout(jPanelPreguntas);
        jPanelPreguntas.setLayout(jPanelPreguntasLayout);
        jPanelPreguntasLayout.setHorizontalGroup(
            jPanelPreguntasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 575, Short.MAX_VALUE)
            .addGroup(jPanelPreguntasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jScrollPanePreguntas, javax.swing.GroupLayout.DEFAULT_SIZE, 575, Short.MAX_VALUE))
        );
        jPanelPreguntasLayout.setVerticalGroup(
            jPanelPreguntasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 290, Short.MAX_VALUE)
            .addGroup(jPanelPreguntasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelPreguntasLayout.createSequentialGroup()
                    .addComponent(jScrollPanePreguntas, javax.swing.GroupLayout.PREFERRED_SIZE, 279, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
        );

        jtxtFechaAlta.setEditable(false);

        jtxtFechaModificacion.setEditable(false);

        jtxtFechaBaja.setEditable(false);

        javax.swing.GroupLayout jPanelRondasLayout = new javax.swing.GroupLayout(jPanelRondas);
        jPanelRondas.setLayout(jPanelRondasLayout);
        jPanelRondasLayout.setHorizontalGroup(
            jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelRondasLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelRondasLayout.createSequentialGroup()
                        .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanelRondasLayout.createSequentialGroup()
                                .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jlblNumeroDePreguntas, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jlblFechaAlta))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addGroup(jPanelRondasLayout.createSequentialGroup()
                                        .addComponent(jtxtNumeroPreguntas, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jbtnActualizar, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(jtxtFechaAlta, javax.swing.GroupLayout.Alignment.TRAILING))
                                .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addGroup(jPanelRondasLayout.createSequentialGroup()
                                        .addGap(21, 21, 21)
                                        .addComponent(jlblFechaModificacion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                    .addGroup(jPanelRondasLayout.createSequentialGroup()
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jlblResponsableDeCierre, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(jPanelRondasLayout.createSequentialGroup()
                                        .addComponent(jtxtFechaModificacion, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jlblFechaBaja)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jtxtFechaBaja, javax.swing.GroupLayout.DEFAULT_SIZE, 84, Short.MAX_VALUE))
                                    .addComponent(jtxtResponsableDeCierre, javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE)))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelRondasLayout.createSequentialGroup()
                                .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(jPanelRondasLayout.createSequentialGroup()
                                        .addComponent(jlblDesde, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(jtxtRealizacionDesde, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 25, Short.MAX_VALUE)
                                        .addComponent(jlblHasta, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jtxtRealizacionHasta, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addGroup(jPanelRondasLayout.createSequentialGroup()
                                        .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                            .addComponent(jlblRespuestasCorrectas, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                            .addComponent(jlblFechasDeRealizacion, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                        .addGap(313, 313, 313)))
                                .addGap(5, 5, 5)))
                        .addContainerGap())
                    .addGroup(jPanelRondasLayout.createSequentialGroup()
                        .addComponent(jPanelPreguntas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())))
        );
        jPanelRondasLayout.setVerticalGroup(
            jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelRondasLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jlblFechaAlta)
                    .addComponent(jlblFechaModificacion)
                    .addComponent(jtxtFechaAlta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jtxtFechaModificacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jlblFechaBaja)
                    .addComponent(jtxtFechaBaja, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jlblNumeroDePreguntas)
                    .addComponent(jtxtNumeroPreguntas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jbtnActualizar)
                    .addComponent(jlblResponsableDeCierre)
                    .addComponent(jtxtResponsableDeCierre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jlblFechasDeRealizacion)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanelRondasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jlblDesde)
                    .addComponent(jlblHasta)
                    .addComponent(jtxtRealizacionDesde, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jtxtRealizacionHasta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(12, 12, 12)
                .addComponent(jlblRespuestasCorrectas)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanelPreguntas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        jlblPrueba.setText("Prueba");

        jtxtId.setEditable(false);
        jtxtId.setFont(new java.awt.Font("Tahoma", 1, 12));
        jtxtId.setHorizontalAlignment(javax.swing.JTextField.CENTER);

        jlblTipoRonda.setText("Tipo Ronda");

        jtxtTipoRonda.setEditable(false);
        jtxtTipoRonda.setFont(new java.awt.Font("Tahoma", 1, 12));
        jtxtTipoRonda.setHorizontalAlignment(javax.swing.JTextField.RIGHT);

        jmnuArchivo.setText("Archivo");
        jmnuArchivo.setFont(new java.awt.Font("Tahoma", 1, 11));
        jmnuArchivo.add(jSeparatorArc1);

        jmnuSalir.setText("Salir");
        jmnuSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmnuSalirActionPerformed(evt);
            }
        });
        jmnuArchivo.add(jmnuSalir);

        jmnuBarRondas.add(jmnuArchivo);

        setJMenuBar(jmnuBarRondas);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jToolBarraHerramientas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 190, Short.MAX_VALUE)
                .addComponent(jlblPrueba)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jtxtId, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(26, 26, 26)
                .addComponent(jlblTipoRonda)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jtxtTipoRonda, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addComponent(jPanelRondas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap(16, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jtxtTipoRonda, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jlblTipoRonda)
                            .addComponent(jlblPrueba)
                            .addComponent(jtxtId, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addComponent(jToolBarraHerramientas, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanelRondas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-603)/2, (screenSize.height-554)/2, 603, 554);
    }// </editor-fold>//GEN-END:initComponents

    //Fernando
    //Metodo asociado al evento de la opción editar
    private void btnEditActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditActionPerformed
        this.setEditable(!this.editable);
}//GEN-LAST:event_btnEditActionPerformed

    //Fernando
    //Metodo asociado al evento de la opción guardar
    private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveActionPerformed
        this.actualizarRonda();
}//GEN-LAST:event_btnSaveActionPerformed

    //Fernando
    //Metodo asociado al evento de la opción salir
    private void btnExitsalir(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExitsalir
        this.salir();
}//GEN-LAST:event_btnExitsalir

    //Fernando
    //Metodo asocaido al evento actualizar
    private void jbtnActualizarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnActualizarActionPerformed
        this.verificarRonda();
    }//GEN-LAST:event_jbtnActualizarActionPerformed

    //Fernando
    //Metodo asociado que verifica que se contesta solo una respuesta de entre las posicbles por pregunta
    private void jtablePreguntasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jtablePreguntasMouseClicked
        this.verificarUnaRespuestaPorPregunta();
    }//GEN-LAST:event_jtablePreguntasMouseClicked

    //Fernando
    //Metodo asociado al evento de la opción salir
    private void jmnuSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jmnuSalirActionPerformed
        this.salir();
    }//GEN-LAST:event_jmnuSalirActionPerformed

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                PantallaPruebas dialog = null;
                try {
                    dialog = new PantallaPruebas(new PantallaMenuPrincipal(), true);
                }

                catch (RemoteException exc) {
                    exc.printStackTrace();
                    JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
                }

                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });

                dialog.setVisible(true);
            }
        });
    }

    //Fernando
    //Metodo para realziar una serie de comprobaciones
    private void verificarRonda(){
        //SI el formulario está en modo consulta no se puede actualizar la informacion
        if(this.formularioDeConsulta)
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.informacionnosepuedemodificar"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);

        else{
            //Obtenemos los parametros asociados al numeros de preguntas minimo y maximo
            GestorParametro gestorParametro = new GestorParametro();
            int numeroPreguntasMinimo = gestorParametro.getNumeroPreguntasMinimas();
            int numeroPreguntasMaximo = gestorParametro.getNumeroPreguntasMaximas();

            //Recuperamos el numero de preguntas del cuadro de texto de la pantalla y lo e
            int numeroPreguntas;
            numeroPreguntas = Integer.parseInt(this.jtxtNumeroPreguntas.getText());

            if(numeroPreguntas < numeroPreguntasMinimo)
                JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorpreguntasminimo"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);

            else {
                if(numeroPreguntas > numeroPreguntasMaximo)
                    JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorpreguntasmaximo"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);

                //En el caso contrario confirmamos que va a cambiar el numero de preguntas y la posible
                //   perdida de informacion
                else{
                    int deseaCambiar = 0;
                    deseaCambiar = JOptionPane.showConfirmDialog(null, GestorIdiomas.getMessage("pantallaRondas.preguntacambiarnumeropreguntas"), GestorIdiomas.getMessage("pantallaRondas.Titulo"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
                    if(deseaCambiar == JOptionPane.YES_OPTION)
                        this.limpiarTablaPreguntas(numeroPreguntas);
                }
            }
        }
    }

    //Fernando
    //Metodo para establecer este formulario como editable
    private void setEditable(boolean editable){
        //Si el formulario es solo de consulta indicamos que no se puede modificar
        if(this.formularioDeConsulta){
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.informacionnosepuedemodificar"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.INFORMATION_MESSAGE);
            this.editable = false;
        }

        else{
            this.editable = editable;
        }

        this.jtxtNumeroPreguntas.setEditable(this.editable);
        this.jtxtRealizacionDesde.setEditable(this.editable);
        this.jtxtRealizacionHasta.setEditable(this.editable);
        
    }

    //Fernando
    //Metodo para limpiar los controles del formulario actual
    private void limpiarPantalla(){
        this.jtxtId.setText(null);
        this.jtxtFechaAlta.setText(null);
        this.jtxtFechaModificacion.setText(null);
        this.jtxtFechaBaja.setText(null);
        this.jtxtNumeroPreguntas.setText(null);
        this.jtxtRealizacionDesde.setText(null);
        this.jtxtRealizacionHasta.setText(null);
    }

    //Fernando
    //Metodo para mostrar un registro al que se pasa por parametor una instancia de prueba y un tipo de ronda
    private void mostrarRegistro(Prueba prueba, TipoRonda tipoRonda) throws RemoteException{
        this.limpiarPantalla();

        //Instanciamos una nueva ronda
        Ronda ronda = new Ronda();
        try{
            //Obtenemos los datos de la ronda a partir de la inforamcion recibida por parametro
            ronda = this.remoto.getRonda(prueba ,tipoRonda);

            String descripcionRonda;
            descripcionRonda = this.remoto.getDescripcionTipoRonda(ronda.getId_tipo_ronda());

            //Asignamos a los distrintos controles los valores respectivos
            this.jtxtId.setText(String.valueOf(ronda.getId_prueba()));
            this.jtxtTipoRonda.setText(descripcionRonda);
            this.jtxtFechaAlta.setText(this.getFormatoFecha(ronda.getFecha_alta()));
            this.jtxtFechaModificacion.setText(this.getFormatoFecha(ronda.getFecha_modificacion()));
            this.jtxtFechaBaja.setText(this.getFormatoFecha(ronda.getFecha_baja()));
            this.jtxtNumeroPreguntas.setText(String.valueOf(ronda.getNumero_preguntas()));
            if(ronda.getId_responsable_cierre()!=0){
                String nombreCompleto;
                nombreCompleto = this.remoto.getUsuario(ronda.getId_responsable_cierre()).toString();
                
                this.jtxtResponsableDeCierre.setText(nombreCompleto);
            }
            this.jtxtRealizacionDesde.setText(this.getFormatoFecha(ronda.getFecha_inicio_realizacion()));
            this.jtxtRealizacionHasta.setText(this.getFormatoFecha(ronda.getFecha_fin_realizacion()));

            this.limpiarTablaPreguntas(ronda.getNumero_preguntas());
            if(ronda.getRespuestas()!=null)
                this.setRespuestasEnTabla(ronda.getRespuestas());
        }

        //Capturamos la excepcion en el caso en que se paunte a un valor nulo
        catch (NullPointerException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errornoexisteelementobuscado"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Capturamos el error en caso de problemas con el servicio remoto
        catch (RemoteException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, exc.detail, GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }
    }

    //Fernando
    //Metodo para actualziar la ronda
    private void actualizarRonda(){
        //Instancio una clase de tipo Ronda
        Ronda ronda = new Ronda();

        //En el caso en que sea necesario lanzaremos una excepcion
        try {
            if(this.formularioDeConsulta)
                JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.informacionnosepuedemodificar"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);

            else{
                ronda = this.convertirAObjeto();

                //Si validamos la ronda informamos y reseteamos las variables asociadas a la insercion
                if(this.jtxtRealizacionDesde.getText().isEmpty() || this.jtxtRealizacionDesde.getText()==null)
                    throw new FechaRealizacionException(GestorIdiomas.getMessage("pantallaRondas.errorFechaInicioRealizacionIncorrecta"));

                if(this.jtxtRealizacionHasta.getText().isEmpty() || this.jtxtRealizacionHasta.getText()==null)
                    throw new FechaRealizacionException(GestorIdiomas.getMessage("pantallaRondas.errorFechaFinRealizacionIncorrecta"));

                boolean estaValidado = false;
                estaValidado =  this.remoto.validarRonda(ronda);

                if (estaValidado==true) {
                    this.remoto.actualizarRonda(ronda);
                    JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.informacion.rondagrabadaconexito"), GestorIdiomas.getMessage("pantallaRondas.Titulo"), JOptionPane.INFORMATION_MESSAGE);
            
                    this.editable = false;
                    this.setEditable(this.editable);
                    this.mostrarRegistro(this.prueba, this.tipoRonda);
                }
            }
        }

        //Capturamos el error en caso de problemas con las Fechas de Inscripcion
        catch(FechaRealizacionException exc){
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, exc.getMessage(), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Capturamos el error en caso de problemas con el servicio remoto
        catch (RemoteException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, exc.detail, GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }
    }

    //Fernando
    //Metodo para obtener un objeto de tipo Ronda a partir de la informacion que aparece en los controles del formulario
    private Ronda convertirAObjeto(){
        Ronda ronda = null;
        
        //En el caso en que sea necesario lanzaremos una excpcion
        try {
            ronda = this.remoto.getRonda(this.prueba, this.tipoRonda);
            int numeroPreguntas;
            numeroPreguntas = Integer.parseInt(this.jtxtNumeroPreguntas.getText());
            ronda.setNumero_preguntas(numeroPreguntas);
            ronda.setFecha_inicio_realizacion(this.getFormatoFecha(this.jtxtRealizacionDesde.getText()));
            ronda.setFecha_fin_realizacion(this.getFormatoFecha(this.jtxtRealizacionHasta.getText()));
            Date fecha = new Date();
            ronda.setFecha_modificacion(fecha);
            ronda.setRespuestas(this.getRespuestasDesdeTabla());
        }

        //Capturamos el error en caso de problemas con el servicio remoto
        catch (RemoteException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, exc.detail, GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En todo caso devolveremos un objeto de tipo Ronda
        finally{
            return ronda;
        }
    }

    //Fernando
    //Metodo para obtener una cadena de texto a partir de un dato de tipo fecha
    private String getFormatoFecha(Date fecha){
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

        if(fecha == null)
            return null;

        return sdf.format(fecha);
    }
    
    //Fernando
    //Metodo para obtener una fecha a partir de una cadena de texto
    private Date getFormatoFecha(String fechaTexto){
        Date fecha = new Date();
        try {
            if (!fechaTexto.isEmpty()) {
                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                sdf.setLenient(false);
                fecha = sdf.parse(fechaTexto);
            }
        }

        //En el caso en que se produzca una excepcion al asignar el formato de fecha correspondiente
        catch (ParseException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.erroralconvertirafecha"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En cualquier caso devuelve una instancia de fecha
        finally{
            return fecha;
        }
    }

    //Fernando
    /**
     * Metodo para rellenar los resultados de la participacion en un jtable sin diferenciar por universidad
     * {pre: la clase ha de estar instanciada previamente y el objeto definido}
     * {post: establece contenidos, la valoracion, de las celdas, informando del numero de respuestas por cada tipo de pregunta/respuesta}
     */
    private void limpiarTablaPreguntas(int numeroFilas){
        Object datos[][] = new Object[numeroFilas][5];

        List<Pregunta> listaPreguntas = new ArrayList<Pregunta>();
        try{
            listaPreguntas = this.remoto.getListaPreguntas(numeroFilas);
        
            int fila = 0;
            for(Pregunta pregunta: listaPreguntas){
                datos[fila][0] = pregunta.getTextoPregunta();
                for(int j=1; j<5; j++){
                    datos[fila][j] = null;
                }
                fila++;
            }

            //Definimos las variables para la cabecera de la tabla
            String textoCabecera1;
            String textoCabecera2;
            String textoCabecera3;
            String textoCabecera4;
            String textoCabecera5;

            //Asignamos los valores del GestorIdiomas
            textoCabecera1 = GestorIdiomas.getMessage("pantallaRondas.textoCabecera1");
            textoCabecera2 = GestorIdiomas.getMessage("pantallaRondas.textoCabecera2");
            textoCabecera3 = GestorIdiomas.getMessage("pantallaRondas.textoCabecera3");
            textoCabecera4 = GestorIdiomas.getMessage("pantallaRondas.textoCabecera4");
            textoCabecera5 = GestorIdiomas.getMessage("pantallaRondas.textoCabecera5");

            jtablePreguntas.setModel(new javax.swing.table.DefaultTableModel(
                datos,
                new String [] {
                    textoCabecera1,
                    textoCabecera2,
                    textoCabecera3,
                    textoCabecera4,
                    textoCabecera5
                }
            ) {
                Class[] types = new Class [] {
                    java.lang.String.class, java.lang.Boolean.class, java.lang.Boolean.class, java.lang.Boolean.class, java.lang.Boolean.class
                };

                public Class getColumnClass(int columnIndex) {
                    return types [columnIndex];
                }
            });

            jScrollPanePreguntas.setViewportView(jtablePreguntas);
        }

        //Capturamos la excepcion en el caso en que se paunte a un valor nulo
        catch(ArrayIndexOutOfBoundsException exc){
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errornoexisteelementobuscado"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }
    }
    //Fernando
    //Metodo para obtener las respuestas seleccionadas desde la tabla de respuestas
    private String getRespuestasDesdeTabla(){
        //Instanciamos un array de tipo caracter con tamaño ogual al número de preguntas de la ronda,
        //  es decir, del numero de filas de la tabla
        char cadenaRespuestas[] = new char[this.jtablePreguntas.getModel().getRowCount()];

        //Recorremos todas las preguntas e inicialmente le asignamos un valor 0 a la respuesta
        try{
            for(int i=0; i<this.jtablePreguntas.getModel().getRowCount(); i++){
                cadenaRespuestas[i] = '0';

                //En  funcion del valor boleano de la celda asinaremos la respuesta A,B,C o D correspondiente
                for(int j=1; j<this.jtablePreguntas.getModel().getColumnCount();j++){
                    Object valorCelda;
                    valorCelda = this.jtablePreguntas.getValueAt(i, j);
                    if(valorCelda instanceof Boolean){
                        if(valorCelda == Boolean.TRUE){
                            switch(j){
                                case 1:
                                    cadenaRespuestas[i] = 'A';
                                    break;
                                case 2:
                                    cadenaRespuestas[i] = 'B';
                                    break;
                                case 3:
                                    cadenaRespuestas[i] = 'C';
                                    break;
                                case 4:
                                    cadenaRespuestas[i] = 'D';
                                    break;
                                default:
                                    throw new RespuestasNoRellenadasException();
                            }
                        }
                    }
                }
            }
        }

        //Si no han rellenado todas las respuestas de la ronda
        catch (RespuestasNoRellenadasException exc){
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorrespuetastasnorellenadas"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc){
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //Terminamos devolviendo el array de caracteres con las respuestas convertido en una cadena de caracteres
        return String.valueOf(cadenaRespuestas);
    }

    //Fernando
    //Metodo para asignar en la tabla las respuestas de las preguntas de la ronda
    private void setRespuestasEnTabla(String respuestas){
        //En el caso en que sea necesario lanzaremos una excepcion
        try{
            if(respuestas != null){
                //Transforma la cadena de caracteres en una rray de tipo char
                char cadenaRespuestas[] = respuestas.toCharArray();

                //Recorremos el array y asignamos el check a la celda correspondiente
                for(int i=0; i<cadenaRespuestas.length; i++){
                    if(cadenaRespuestas[i] == 'A')
                        this.jtablePreguntas.setValueAt(Boolean.TRUE,i, 1);

                    if(cadenaRespuestas[i] == 'B')
                        this.jtablePreguntas.setValueAt(Boolean.TRUE,i, 2);

                    if(cadenaRespuestas[i] == 'C')
                        this.jtablePreguntas.setValueAt(Boolean.TRUE,i, 3);

                    if(cadenaRespuestas[i] == 'D')
                        this.jtablePreguntas.setValueAt(Boolean.TRUE,i, 4);
                }
            }
        }

        //Capturamos la excepcion en el caso en que se paunte a un valor nulo
        catch(ArrayIndexOutOfBoundsException exc){
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errornoexisteelementobuscado"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }
    }

    //Fernando
    //Metodo para verificar que solo se contesta una respuesta pòr pregunta
    private void verificarUnaRespuestaPorPregunta(){
        //DEfinimos y obtenemos de la tabla la pregunta en la que nos encontramos y la respuesta seleccionada
        int preguntaSeleccionada = 0;
        int respuestaSeleccionada = 0;
        preguntaSeleccionada = this.jtablePreguntas.getSelectedRow();
        respuestaSeleccionada = this.jtablePreguntas.getSelectedColumn();
        
        boolean yaHayRespuesta = false;

        //Recorremos todas las respuestas de la pregunta para ver si ya se ha contestado a alguna
        for(int j = 0; j < this.jtablePreguntas.getModel().getColumnCount(); j++){
            //Evidentemente NO evaluo si la columna modificada es la que hay que revisar!!!
            if(j != respuestaSeleccionada){
                Object valorCelda;
                valorCelda = this.jtablePreguntas.getValueAt(preguntaSeleccionada, j);
                //Si es de tipo booleano y encima es verdadero ya exisitia respuesta!!!
                if(valorCelda instanceof Boolean){
                    if(valorCelda == Boolean.TRUE){
                        yaHayRespuesta = true;
                    }
                }
            }
        }

        //Si ya habia respuesta previa informamos y "desmarcamos" la respuesta en la tabla
        if(yaHayRespuesta){
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorRespuestaDuplicada"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
            this.jtablePreguntas.setValueAt(null,preguntaSeleccionada, respuestaSeleccionada);
        }
    }

    //Fernando
    //Metodo para salir del formulario
    private void salir(){
        try{
            Ronda ronda = new Ronda();
            ronda = this.convertirAObjeto();
            
            if(!this.formularioDeConsulta){
                if(!this.remoto.validarRonda(ronda))
                    throw new RondaNoValidadaException();

                if(JOptionPane.showConfirmDialog(null, GestorIdiomas.getMessage("pantallaRondas.preguntanomaseditable"), GestorIdiomas.getMessage("pantallaRondas.Titulo"), JOptionPane.INFORMATION_MESSAGE) == JOptionPane.YES_OPTION){}
                    this.setVisible(false);
            }
            else
                this.setVisible(false);
        }

        catch(RondaNoValidadaException exc){
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.rondaNoValidadaException"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        catch(RemoteException exc){
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, exc.detail, GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        catch(Exception exc){
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }
    }

    //Fernando
    //Metodo para inicializar mis componentes
    private void myInitComponents(){
        try {
            this.mostrarRegistro(this.prueba, this.tipoRonda);

           //Llamando al gestor de idiomas para los menus
            this.jmnuArchivo.setText(GestorIdiomas.getMessage("pantallaRondas.MenuArchivo"));
            this.jmnuSalir.setText(GestorIdiomas.getMessage("pantallaRondas.MenuArchivoSalir"));

            this.jlblPrueba.setText(GestorIdiomas.getMessage("pantallaRondas.jlblPrueba"));
            this.jlblTipoRonda.setText(GestorIdiomas.getMessage("pantallaRondas.jlblTipoRonda"));
            this.jlblFechaAlta.setText(GestorIdiomas.getMessage("pantallaRondas.jlblFechaAlta"));
            this.jlblFechaModificacion.setText(GestorIdiomas.getMessage("pantallaRondas.jlblFechaModificacion"));
            this.jlblFechaBaja.setText(GestorIdiomas.getMessage("pantallaRondas.jlblFechaBaja"));

            this.jlblNumeroDePreguntas.setText(GestorIdiomas.getMessage("pantallaRondas.jlblNumeroDePreguntas"));
            this.jlblResponsableDeCierre.setText(GestorIdiomas.getMessage("pantallaRondas.jlblResponsableDeCierre"));
            this.jlblFechasDeRealizacion.setText(GestorIdiomas.getMessage("pantallaRondas.jlblFechasDeRealizacion"));
            this.jlblDesde.setText(GestorIdiomas.getMessage("pantallaRondas.jlblDesde"));
            this.jlblHasta.setText(GestorIdiomas.getMessage("pantallaRondas.jlblHasta"));

            this.jlblRespuestasCorrectas.setText(GestorIdiomas.getMessage("pantallaRondas.jlblRespuestasCorrectas"));

            this.btnEdit.setToolTipText(GestorIdiomas.getMessage("btnEdit.tooltiptext"));
            this.btnSave.setToolTipText(GestorIdiomas.getMessage("btnSave.tooltiptext"));
            this.btnExit.setToolTipText(GestorIdiomas.getMessage("btnExit.tooltiptext"));

            this.setTitle(GestorIdiomas.getMessage("pantallaRondas.Titulo"));
        }

        //Capturamos el error en caso de problemas con el servicio remoto
        catch (RemoteException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, exc.detail, GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }

        //En el caso en que se haya capturado una excepcion de caracter general
        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(this, GestorIdiomas.getMessage("pantallaRondas.errorgeneral"), GestorIdiomas.getMessage("pantallaRondas.errorTitulo"), JOptionPane.ERROR_MESSAGE);
        }
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEdit;
    private javax.swing.JButton btnExit;
    private javax.swing.JButton btnSave;
    private javax.swing.JPanel jPanelPreguntas;
    private javax.swing.JPanel jPanelRondas;
    private javax.swing.JScrollPane jScrollPanePreguntas;
    private javax.swing.JToolBar.Separator jSeparator1;
    private javax.swing.JPopupMenu.Separator jSeparatorArc1;
    private javax.swing.JToolBar jToolBarraHerramientas;
    private javax.swing.JButton jbtnActualizar;
    private javax.swing.JLabel jlblDesde;
    private javax.swing.JLabel jlblFechaAlta;
    private javax.swing.JLabel jlblFechaBaja;
    private javax.swing.JLabel jlblFechaModificacion;
    private javax.swing.JLabel jlblFechasDeRealizacion;
    private javax.swing.JLabel jlblHasta;
    private javax.swing.JLabel jlblNumeroDePreguntas;
    private javax.swing.JLabel jlblPrueba;
    private javax.swing.JLabel jlblResponsableDeCierre;
    private javax.swing.JLabel jlblRespuestasCorrectas;
    private javax.swing.JLabel jlblTipoRonda;
    private javax.swing.JMenu jmnuArchivo;
    private javax.swing.JMenuBar jmnuBarRondas;
    private javax.swing.JMenuItem jmnuSalir;
    private javax.swing.JTable jtablePreguntas;
    private javax.swing.JFormattedTextField jtxtFechaAlta;
    private javax.swing.JFormattedTextField jtxtFechaBaja;
    private javax.swing.JFormattedTextField jtxtFechaModificacion;
    private javax.swing.JTextField jtxtId;
    private javax.swing.JTextField jtxtNumeroPreguntas;
    private javax.swing.JTextField jtxtRealizacionDesde;
    private javax.swing.JTextField jtxtRealizacionHasta;
    private javax.swing.JTextField jtxtResponsableDeCierre;
    private javax.swing.JTextField jtxtTipoRonda;
    // End of variables declaration//GEN-END:variables

}
